package com.ginmeta.common.utils;

import cn.hutool.core.exceptions.UtilException;
import cn.hutool.core.util.StrUtil;
import com.ginmeta.common.base.PageModel;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.query.QueryColumn;

/**
 * 分页工具类
 * @author GinMeta
 */
public class PageUtils {

    /**
     * 仅支持字母、数字、下划线、空格、逗号、小数点（支持多个字段排序）
     */
    public static String SQL_PATTERN = "[a-zA-Z0-9_\\ \\,\\.]+";

    /**
     * mybatisFlex设置请求分页数据
     */
    public static <T> Page<T> startFlexPage() {
        PageModel pageModel = new PageModel();
        Integer pageNumber = pageModel.getPageNumber();
        Integer pageSize = pageModel.getPageSize();
        if (StrUtil.isNotEmpty(pageModel.getOrderBy()) && !pageModel.getOrderBy().matches(SQL_PATTERN)) {
            throw new UtilException("参数不符合规范，不能进行查询");
        }
        Page<T> page = new Page<>();
        page.setPageNumber(pageNumber);
        page.setPageSize(pageSize);
        return page;
    }

    /**
     * mybatisFlex设置排序
     * @return QueryColumn
     */
    public static QueryColumn getFlexOrderBy() {
        PageModel pageModel = new PageModel();
        String orderByColumn = pageModel.getOrderByColumn();
        QueryColumn queryColumn = new QueryColumn(orderByColumn);
        String asc = pageModel.getIsAsc();
        if ("asc".equals(asc)) {
            queryColumn.asc();
        } else if ("desc".equals(asc)) {
            queryColumn.desc();
        }
        return queryColumn;
    }
}
